Amazon S3をHashiCorp Vault Serverのストレージにする
これまでの記事はこちらです。
- HashiCorp Vaultの基礎知識と導入
- HashiCorp Vault ServerをAmazon EC2に構築する
- HashiCorp VaultのConfigurationについて
- HashiCorp Vault Serverをオレオレ証明書を使ってTLS対応にする
はじめに
今回はVault ServerのストレージとしてAmazon S3を使ってみます。
やってみた
サーバ側の作業
Vault Server起動時に指定するConfigファイルを作成します。storage項目でS3を指定します。また前回同様にオレオレ証明書でTLSを有効にしています。
storage "s3" { region = "ap-northeast-1" bucket = "smokeymonkey" } listener "tcp" { address = "EC2のプライベートIPアドレス:8200" tls_cert_file = "/home/ec2-user/vault-server.crt" tls_key_file = "/home/ec2-user/vault-server.key" }
S3を使う場合のパラメータは以下の通りです。
- bucket ... 必須項目。Amazon S3のバケット名を指定。
- endpoint ... S3では無くS3互換のエンドポイントを使うときに指定。デフォルト値は値無し。環境変数AWS_S3_ENDPOINTでも指定可能。
- region ... S3バケットのリージョンを指定。デフォルトはus-east-1。今回のように東京リージョンを使う場合は指定が必要。
- access_key、secret_key ... S3バケットに接続するために必要なアクセスキーとシークレットキーを指定。環境変数AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYでも指定可能。今回はEC2にIAMロールを指定するので設定していません。
- session_token ... 一時キーでアクセスするときに設定する。環境変数AWS_SESSION_TOKENでも指定可能。
- max_parallel ... S3への最大同時要求数。デフォルト値は128。
- s3_force_path_style ... 仮想ホスティング形式のエンドポイント名(s3.amazonaws.com/BUCKETではなくBUCKDET.s3.amazonaws.com)を強制するための設定。デフォルトでfalse。
- disable_ssl ... エンドポイントへの接続にSSLを使用しない設定。デフォルトでfalse。
Vault ServerとなっているEC2にIAMロールを割り当てます。今回はAmazonS3FullAccessポリシーを適用しています。
Vault Serverを起動します。
$ sudo ./bin/vault server -config=config.hcl
起動しただけではS3には特にファイルは作成されません。
クライアント側の作業
Vault Serverのアドレスを環境変数に設定します。
$ export VAULT_ADDR='https://EC2のパブリックIPアドレス:8200'
initializeします。
$ vault operator init -tls-skip-verify
するとcoreとsysという2つのフォルダが作成されます。これはVault Serverの設定などが格納されています。
Unsealして使えるようにします。
$ vault operator unseal -tls-skip-verify $ vault operator unseal -tls-skip-verify $ vault operator unseal -tls-skip-verify
loginします。
$ vault login -tls-skip-verify 6bcc76e3-98d8-3d5d-a8e1-a15ad3cc9ac8
さて、それでは実際に値を格納してみます。
$ vault write -tls-skip-verify secret/sasakidaisuke value=smokeymonkey Success! Data written to: secret/sasakidaisuke
するとS3上にKey値をファイル名としたファイルが作成されます。
もちろん暗号化されていますので、ダウンロードしても単純にファイルの中身を参照することは出来ません。
$ cat Downloads/sasakidaisuke 8c�9ޏ�_��D�����h��F� ;5���w�_��ru�ɷ�l�H<�2
さいごに
これでS3をStorageとしたVault Serverを起動することが出来ました。可用性の高いS3を使うことでストレージが堅牢になります。ただし注意点として、S3を使った場合High Availability Modeが使えませんので、フロントとなるVault Serverを冗長化することは出来ません。